/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui.Produccion;

import Controlador.Bean.Almacen.ProdxSolicitudMovimiento;
import Controlador.Bean.Almacen.SolicitudMovimiento;
import Controlador.Bean.Produccion.ProduccionReal;
import Controlador.Bean.Produccion.ProduccionRealRB;
import Controlador.Bean.Produccion.ProductoxFase;
import Controlador.Service.Almacen.GestionAlmacenes;
import Controlador.Service.Produccion.GestionProduccion;
import Controlador.Service.Produccion.ServicioAsignacionReal;
import Controlador.Service.Seguridad.ServicioPerfil;
import gui.General.Main;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author ELECTRO
 */
public class agregarProduccion extends javax.swing.JInternalFrame {

    /**
     * Creates new form agregarProduccion
     */
    ServicioAsignacionReal sar = new ServicioAsignacionReal();
    TablaAsignacionReal horneado;
    TablaAsignacionReal decorado;
    TablaAsignacionReal rellenado;
    SolicitudMovimiento sm = null;
    TablaAsignacionReal empaquetado;
    int flag = 0;
    public String idAlmacenMP = "";
    public String idAlmacenPI = "";
    public String idAlmacenPT = "";
    public int fase = 0;
    int flag1 = 0;
    public int conteo=0;
    public int data = 0;
    public agregarProduccion() {
        initComponents();
        initComp();
        
        flag = 1;
    }
    
    public void initComp(){
        jdpRegistro.setDate(new Date());
        Calendar calendarA = Calendar.getInstance();
        // starting today if we are in a hurry
        calendarA.setTime(new Date());
        if(ServicioPerfil.verificarPermiso(Main.usu.getIdUsuario(), "SEGMPPER", "ACC000")){
            jdpRegistro.getMonthView().setUpperBound(calendarA.getTime());
        }
        txtHora.setText(""+calendarA.get(Calendar.HOUR_OF_DAY)+":"+calendarA.get(Calendar.MINUTE)+":"+calendarA.get(Calendar.SECOND));
        txtHora.setEditable(false);
        txtIdProduccion.setEditable(false);
        txtNombreProduccion.setEditable(false);
        cmbTurno.removeAllItems();
        cmbTurno.addItem("Día");
        cmbTurno.addItem("Noche");
        horneado = new TablaAsignacionReal(jdpRegistro, cmbTurno, "TMA000001"); 
        decorado = new TablaAsignacionReal(jdpRegistro, cmbTurno, "TMA000002"); 
        rellenado = new TablaAsignacionReal(jdpRegistro, cmbTurno, "TMA000003"); 
        empaquetado = new TablaAsignacionReal(jdpRegistro, cmbTurno, "TMA000004"); 
        tbTable.add("Fase Horneado", horneado);
        tbTable.add("Fase Decorado", decorado);
        tbTable.add("Fase Rellenado", rellenado);
        tbTable.add("Fase Empaquetado", empaquetado);
        tbTable.setEnabledAt(0, false);
        tbTable.setEnabledAt(1, false);
        tbTable.setEnabledAt(2, false);
        tbTable.setEnabledAt(3, false);
        
    }

    
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel3 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txtIdProduccion = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        txtNombreProduccion = new javax.swing.JTextField();
        jLabel9 = new javax.swing.JLabel();
        jdpRegistro = new org.jdesktop.swingx.JXDatePicker();
        jLabel8 = new javax.swing.JLabel();
        txtHora = new javax.swing.JTextField();
        jScrollPane3 = new javax.swing.JScrollPane();
        txtDescripcion = new javax.swing.JTextArea();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        cmbTurno = new javax.swing.JComboBox();
        jButton1 = new javax.swing.JButton();
        tbTable = new javax.swing.JTabbedPane();
        btnSiguiente = new javax.swing.JButton();

        setBorder(null);
        setClosable(true);
        setTitle("Agregar Producción");

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Datos Generales"));
        jPanel3.setToolTipText("");

        jLabel1.setText("IdProducción:");

        jLabel5.setText("Nombre Producción:");

        txtNombreProduccion.setText(" ");

        jLabel9.setText("Fecha Registro:");

        jdpRegistro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jdpRegistroActionPerformed(evt);
            }
        });

        jLabel8.setText("Hora de Registro:");

        txtDescripcion.setColumns(20);
        txtDescripcion.setRows(5);
        jScrollPane3.setViewportView(txtDescripcion);

        jLabel2.setText("Descripción:");

        jLabel3.setText("Turno:");

        cmbTurno.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTurno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbTurnoActionPerformed(evt);
            }
        });

        jButton1.setText("Seleccionar Almacenes");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(21, 21, 21)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel3)
                    .addComponent(jLabel9)
                    .addComponent(jLabel5)
                    .addComponent(jLabel1))
                .addGap(18, 18, 18)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jdpRegistro, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
                    .addComponent(txtNombreProduccion)
                    .addComponent(txtIdProduccion)
                    .addComponent(cmbTurno, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(97, 97, 97)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel8)
                    .addComponent(jLabel2))
                .addGap(18, 18, 18)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(txtHora)
                        .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE))
                    .addComponent(jButton1))
                .addContainerGap(52, Short.MAX_VALUE))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtIdProduccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel8)
                    .addComponent(txtHora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(txtNombreProduccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel5)
                            .addComponent(jLabel2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel9)
                            .addComponent(jdpRegistro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(cmbTurno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel3))
                    .addComponent(jButton1))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        btnSiguiente.setText("Empezar");
        btnSiguiente.setToolTipText("");
        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSiguienteActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(tbTable))
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addGap(308, 308, 308)
                .addComponent(btnSiguiente)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tbTable, javax.swing.GroupLayout.PREFERRED_SIZE, 172, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnSiguiente)
                .addGap(25, 25, 25))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jdpRegistroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jdpRegistroActionPerformed
        // TODO add your handling code here:
        if(flag==1){
            horneado.actualizarTabla();
            decorado.actualizarTabla();
            empaquetado.actualizarTabla();
            rellenado.actualizarTabla();
        }
    }//GEN-LAST:event_jdpRegistroActionPerformed

    private void cmbTurnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbTurnoActionPerformed
        // TODO add your handling code here:
        if(flag==1){
            horneado.actualizarTabla();
            decorado.actualizarTabla();
            empaquetado.actualizarTabla();
            rellenado.actualizarTabla();
        }
    }//GEN-LAST:event_cmbTurnoActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here:
        SeleccionarAlmacenes sa = new SeleccionarAlmacenes(this);
        Main.getDesktop().add(sa);
        sa.setVisible(true);
    }//GEN-LAST:event_jButton1ActionPerformed

    private void btnSiguienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSiguienteActionPerformed
        // TODO add your handling code here:
        
        if(idAlmacenMP.isEmpty() && idAlmacenPI.isEmpty() && idAlmacenPT.isEmpty()){
            JOptionPane.showMessageDialog(this, "Debe seleccionar almacén", "Error", JOptionPane.ERROR_MESSAGE);
            return;
        } 
        if(idAlmacenMP.isEmpty() && idAlmacenPI.isEmpty() && idAlmacenPT.isEmpty()){
            JOptionPane.showMessageDialog(this, "Debe seleccionar almacén", "Error", JOptionPane.ERROR_MESSAGE);
            return;
        } 
        if(horneado.tb.data.isEmpty()){
            JOptionPane.showMessageDialog(this, "Debe seleccionar una fecha con producción", "Error", JOptionPane.ERROR_MESSAGE);
            return;
        }
        this.setClosable(false);
        int flag2 = 0;
        List<ProduccionReal> pr;
        int resultado=0;
        if(fase==0){
            List<ProdxSolicitudMovimiento> prodxSol;
            for(int i=0;i<empaquetado.tb.data.size(); i++){
                prodxSol = new ArrayList<>();
                sm = new SolicitudMovimiento("", Main.usu.getIdEmpleadoAdm(), idAlmacenMP, "Salida", new Date(), "Salida por producción: "+empaquetado.tb.data.get(i).getIdProducto(), "1", "Externo");
                GestionAlmacenes.agregarSolicitudMovimiento(sm);
                HashMap<String, Double> productos = obtenerEntradas(empaquetado.tb.data.get(i));
                List<String> codigos;
                codigos = new ArrayList<String>(productos.keySet());
                for(int j=0; j<codigos.size(); j++){
                    prodxSol.add(new ProdxSolicitudMovimiento(codigos.get(j), sm.getIdSolicitudMovimiento(), productos.get(codigos.get(j))));
                }
                
                GestionAlmacenes.agregarProdxSolMov(prodxSol, idAlmacenMP, "Salida");
            }
            
        }
        if(fase!=0)
            resultado = JOptionPane.showConfirmDialog(this, "Al presionar siguiente no podrá modificar los valores de esta fase. ¿Desea continuar?", "Confirmar", JOptionPane.INFORMATION_MESSAGE);
        if(resultado==0){
            if(fase<4){
                btnSiguiente.setText("Siguiente Fase");
            }else{
                btnSiguiente.setText("Finalizar");
            }
            if(fase <= 4){
                if(sar.verificarSalidaAlmacen(sm.getIdSolicitudMovimiento())>=1 || fase==0 || flag1>0){
                    flag1++;
                if(fase < 4)
                    tbTable.setEnabledAt(conteo, true);
                conteo=fase>conteo?fase:conteo;
                if(conteo == 1 && data == 0){
                    tbTable.setEnabledAt(0, true);
                    horneado.desabilitarCampos();
                    data++;
                    if(verificarMerma(horneado)){
                        List<ProdxSolicitudMovimiento> prodxSol;
                        prodxSol = new ArrayList<>();
                        sm = new SolicitudMovimiento("", Main.usu.getIdEmpleadoAdm(), idAlmacenPI, "Entrada", new Date(), "Entrada de merma", "1", "Externo");                    
                        GestionAlmacenes.agregarSolicitudMovimiento(sm);
                        flag2=0;
                        for(int i=0;i<horneado.tb.data.size();i++){
                            for(int j=0; j<prodxSol.size(); j++){
                                if(horneado.tb.data.get(i).getIdProducto().equals(prodxSol.get(j).getIdProducto())){
                                    prodxSol.get(j).setCantidad(prodxSol.get(j).getCantidad()+horneado.tb.data.get(i).getMermaReal());
                                    flag2++;
                                    break;
                                }
                            }
                            if(!horneado.tb.data.get(i).getIdProducto().contains("INT")&&!horneado.tb.data.get(i).getIdProducto().contains("TER")&&flag2==0)
                                prodxSol.add(new ProdxSolicitudMovimiento(horneado.tb.data.get(i).getIdProducto(), sm.getIdSolicitudMovimiento(),horneado.tb.data.get(i).getMermaReal()));  
                            flag2=0;
                         }
                        
                        GestionAlmacenes.agregarProdxSolMov(prodxSol, idAlmacenPI, "Entrada");
                        
                    }
                    //agregar
                    ////////LO  QQUE AGREGUE FIDO PERO NO SE CUALES SON LOS VALORES EXACTOS
                    pr = new ArrayList<>();
                    for(int i=0;i<horneado.tb.data.size(); i++){
                        pr.add(new ProduccionReal("",horneado.tb.data.get(i).getIdOperador(),horneado.tb.data.get(i).getIdTurno(),horneado.tb.data.get(i).getIdProducto(),horneado.tb.data.get(i).getIdMaquina(),new Date(),horneado.tb.data.get(i).getCantidadReal(),3.3,horneado.tb.data.get(i).getMermaReal()));
                    }
//                    GestionProduccion.agregarProdReal(pr);
                                   
                    
                }else if(conteo == 2 && data==1){
                    tbTable.setEnabledAt(1, true);
                    decorado.desabilitarCampos();
                    data++;
                    if(!decorado.tb.data.isEmpty() || verificarMerma(decorado)){
                        List<ProdxSolicitudMovimiento> prodxSol;
                        pr = new ArrayList<>();
                        prodxSol = new ArrayList<>();
                        sm = new SolicitudMovimiento("", Main.usu.getIdEmpleadoAdm(), idAlmacenPI, "Entrada", new Date(), "Entrada de merma", "1", "Externo");                    
                        GestionAlmacenes.agregarSolicitudMovimiento(sm);
                        flag2=0;
                        for(int i=0;i<decorado.tb.data.size();i++){
                            if(decorado.tb.data.get(i).getMermaReal()>0){
                                for(int j=0; j<prodxSol.size(); j++){
                                    if(decorado.tb.data.get(i).getIdProducto().equals(prodxSol.get(j).getIdProducto())){
                                           prodxSol.get(j).setCantidad(prodxSol.get(j).getCantidad()+decorado.tb.data.get(i).getMermaReal());
                                           flag2++;
                                           break;
                                    }
                                }
                                if(flag2==0){
                                    prodxSol.add(new ProdxSolicitudMovimiento(decorado.tb.data.get(i).getIdProducto(), sm.getIdSolicitudMovimiento(),decorado.tb.data.get(i).getMermaReal()));     
                                }
                            }
                        }
                        pr = new ArrayList<>();
                        for(int i=0;i<decorado.tb.data.size(); i++){
                            pr.add(new ProduccionReal("",decorado.tb.data.get(i).getIdOperador(),decorado.tb.data.get(i).getIdTurno(),decorado.tb.data.get(i).getIdProducto(),decorado.tb.data.get(i).getIdMaquina(),new Date(),decorado.tb.data.get(i).getCantidadReal(),3.3,decorado.tb.data.get(i).getMermaReal()));
                        }
                        GestionProduccion.agregarProdReal(pr);
                        GestionAlmacenes.agregarProdxSolMov(prodxSol, idAlmacenPI, "Entrada");
                    }
                    
                    //agregar
                }else if(conteo == 3 && data==2){
                    tbTable.setEnabledAt(2, true);
                    rellenado.desabilitarCampos();
                    data++;
                    if(!rellenado.tb.data.isEmpty() || verificarMerma(rellenado)){
                        List<ProdxSolicitudMovimiento> prodxSol;
                        prodxSol = new ArrayList<>();
                        sm = new SolicitudMovimiento("", Main.usu.getIdEmpleadoAdm(), idAlmacenPI, "Entrada", new Date(), "Entrada de merma", "1", "Externo");                    
                        GestionAlmacenes.agregarSolicitudMovimiento(sm);
                        flag2=0;
                        for(int i=0;i<rellenado.tb.data.size();i++){
                            if(rellenado.tb.data.get(i).getMermaReal()>0)
                                for(int j=0;j<prodxSol.size();j++){
                                    if(rellenado.tb.data.get(i).getIdProducto().equals(prodxSol.get(j).getIdProducto())){
                                           prodxSol.get(j).setCantidad(prodxSol.get(j).getCantidad()+rellenado.tb.data.get(i).getMermaReal());
                                           flag2++;
                                           break;
                                    }
                                }
                            if(flag2==0)
                                prodxSol.add(new ProdxSolicitudMovimiento(rellenado.tb.data.get(i).getIdProducto(), sm.getIdSolicitudMovimiento(),rellenado.tb.data.get(i).getMermaReal()));                        
                         }
                        pr = new ArrayList<>();
                        for(int i=0;i<rellenado.tb.data.size(); i++){
                            pr.add(new ProduccionReal("",rellenado.tb.data.get(i).getIdOperador(),rellenado.tb.data.get(i).getIdTurno(),rellenado.tb.data.get(i).getIdProducto(),rellenado.tb.data.get(i).getIdMaquina(),new Date(),rellenado.tb.data.get(i).getCantidadReal(),3.3,rellenado.tb.data.get(i).getMermaReal()));
                        }
                        GestionProduccion.agregarProdReal(pr);
                        GestionAlmacenes.agregarProdxSolMov(prodxSol, idAlmacenPI, "Entrada");
                    }
                    
                    //agregar
                }else if(conteo == 4 && data==3){
                    //Final
                    tbTable.setEnabledAt(3, true);
                    empaquetado.desabilitarCampos();
                    List<ProdxSolicitudMovimiento> prodxSol;
                    if(verificarMerma(empaquetado)){
                        prodxSol = new ArrayList<>();
                        sm = new SolicitudMovimiento("", Main.usu.getIdEmpleadoAdm(), idAlmacenPI, "Entrada", new Date(), "Entrada de merma", "1", "Externo");                    
                        GestionAlmacenes.agregarSolicitudMovimiento(sm);
                        flag2=0;
                        for(int i=0;i<empaquetado.tb.data.size();i++){
                            if(empaquetado.tb.data.get(i).getMermaReal()>0)
                                for(int j=0;j<prodxSol.size();j++){
                                    if(empaquetado.tb.data.get(i).getIdProducto().equals(prodxSol.get(j).getIdProducto())){
                                           prodxSol.get(j).setCantidad(prodxSol.get(j).getCantidad()+empaquetado.tb.data.get(i).getMermaReal());
                                           flag2++;
                                           break;
                                    }
                                }
                            if(flag2==0)
                                prodxSol.add(new ProdxSolicitudMovimiento(empaquetado.tb.data.get(i).getIdProducto(), sm.getIdSolicitudMovimiento(),empaquetado.tb.data.get(i).getMermaReal()));                           
                         }
                        GestionAlmacenes.agregarProdxSolMov(prodxSol, idAlmacenPI, "Entrada");
                        
                    }
                    prodxSol = new ArrayList<>();
                    sm = new SolicitudMovimiento("", Main.usu.getIdEmpleadoAdm(), idAlmacenPT, "Entrada", new Date(), "Entrada de productos finales", "1", "Externo");                    
                    GestionAlmacenes.agregarSolicitudMovimiento(sm);
                   flag2=0;
                    for(int i=0;i<empaquetado.tb.data.size();i++){
                        if(empaquetado.tb.data.get(i).getMermaReal()>0){
                                for(int j=0;j<prodxSol.size();j++){
                                    if(empaquetado.tb.data.get(i).getIdProducto().equals(prodxSol.get(j).getIdProducto())){
                                           prodxSol.get(j).setCantidad(prodxSol.get(j).getCantidad()+empaquetado.tb.data.get(i).getCantidadReal());
                                           flag2++;
                                           break;
                                    }
                                }
                        }
                        
                        
                        if(flag2==0)
                            
                            prodxSol.add(new ProdxSolicitudMovimiento(empaquetado.tb.data.get(i).getIdProducto(), sm.getIdSolicitudMovimiento(),empaquetado.tb.data.get(i).getCantidadReal()));                          
                    }
                    pr = new ArrayList<>();
                        for(int i=0;i<empaquetado.tb.data.size(); i++){
                            pr.add(new ProduccionReal("",empaquetado.tb.data.get(i).getIdOperador(),empaquetado.tb.data.get(i).getIdTurno(),empaquetado.tb.data.get(i).getIdProducto(),empaquetado.tb.data.get(i).getIdMaquina(),new Date(),empaquetado.tb.data.get(i).getCantidadReal(),3.3,empaquetado.tb.data.get(i).getMermaReal()));
                        }
                    GestionProduccion.agregarProdReal(pr);
                    GestionAlmacenes.agregarProdxSolMov(prodxSol, idAlmacenPT, "Entrada");
                    btnSiguiente.setEnabled(false);
                    //agregar
                }
                if(fase<4){
                    tbTable.setSelectedIndex(fase);
                }
                }else{
                    JOptionPane.showMessageDialog(this, "Error, no se puede continuar hasta no aceptar la salida de Materia Prima a almacén","Error",JOptionPane.ERROR_MESSAGE);
                    return;
                }
                fase++;
            }
        }if(btnSiguiente.getText().equals("Finalizar")){
            this.dispose();
        }
    }//GEN-LAST:event_btnSiguienteActionPerformed

    public boolean verificarMerma(TablaAsignacionReal tabla){
        for(int i=0; i<tabla.tb.data.size(); i++){
            if(tabla.tb.data.get(i).getMermaFicticia()>0)
                return true;
        }
        return false;
    }
    
    public HashMap<String, Double> obtenerEntradas(ProduccionReal pr){
        HashMap<String, Double> hm = new HashMap<>();
        List<HashMap<String,Object>> productos = GestionProduccion.seleccionarProdFase(pr.getIdProducto());
        int cantidad = 0;
        Double aux = 0.0;
        for(int i=0; i<productos.size(); i++){
             if("S".compareTo((String)productos.get(i).get("entradasalida"))==0){
                 if(cantidad != 0){ 
                     aux = hm.get((String)productos.get(i).get("idproducto"));
                 }
                 hm.put((String)productos.get(i).get("idproducto"),(Double)productos.get(i).get("cantidad"));
                 cantidad++;
             }else{
                 if(cantidad==1){
                     hm.put((String)productos.get(i).get("idproducto"),(Double)productos.get(i).get("cantidad")*(pr.getMermaFicticia()*pr.getCantidadFicticia()));
                 }else{
                     hm.put((String)productos.get(i).get("idproducto"),(Double)productos.get(i).get("cantidad")*(aux*pr.getMermaFicticia()*pr.getCantidadFicticia()));
                 }
             }
        }
        List<String> producto = new ArrayList<String>(hm.keySet());
        for(int i=0;i<producto.size();i++){
            if(producto.get(i).contains("TER")||producto.get(i).contains("INT")){
                hm.remove(producto.get(i));
            }
        }
        
        return hm;
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnSiguiente;
    private javax.swing.JComboBox cmbTurno;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane3;
    private org.jdesktop.swingx.JXDatePicker jdpRegistro;
    private javax.swing.JTabbedPane tbTable;
    private javax.swing.JTextArea txtDescripcion;
    private javax.swing.JTextField txtHora;
    private javax.swing.JTextField txtIdProduccion;
    private javax.swing.JTextField txtNombreProduccion;
    // End of variables declaration//GEN-END:variables
}
